home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tools / jade / man / jade.info-3 (.txt) < prev    next >
GNU Info File  |  1995-03-09  |  50KB  |  1,067 lines

  1. This is Info file jade.info, produced by Makeinfo-1.55 from the input
  2. file jade.texi.
  3. START-INFO-DIR-ENTRY
  4. * Jade: (jade).            An editor for X11 and AmigaDOS
  5. END-INFO-DIR-ENTRY
  6.    This is Edition 1.3, last updated 7 October 1994, of `The Jade
  7. Manual', for Jade, Version 3.2.
  8.    Jade is a text editor for X11 (on Unix) and the Amiga.
  9.    Copyright 1993, 1994 John Harper.
  10.    Permission is granted to make and distribute verbatim copies of this
  11. manual provided the copyright notice and this permission notice are
  12. preserved on all copies.
  13.    Permission is granted to copy and distribute modified versions of
  14. this manual under the conditions for verbatim copying, provided that
  15. the entire resulting derived work is distributed under the terms of a
  16. permission notice identical to this one.
  17. File: jade.info,  Node: Using Marks,  Next: Interrupting Jade,  Prev: Using the Prompt,  Up: Using Jade
  18. Using Marks
  19. ===========
  20.    Marks are used to record a position in a file, as the file's buffer
  21. is modified so does the position that the mark points to -- a mark will
  22. keep pointing at the same character no matter what happens (unless the
  23. character is deleted!).
  24.    The other good thing about marks is that they point to files *not*
  25. buffers. This means that you can set a mark in a buffer, delete the
  26. buffer and then move to the position of the mark, the file will be
  27. reloaded and the cursor will point at the original character.
  28.    Normally there are three user-accessible marks (1) and one special
  29. `auto-mark' which is used, amongst other things, to record the
  30. "previous" position of the cursor, allowing you to retrace your last
  31. major step.
  32.    The commands available on marks are,
  33.      Move to the mark #1, #2 or #3, depending on which function key is
  34.      pressed (F1 means mark #1, etc...). If the file pointed to is not
  35.      in memory it will be loaded into a new buffer.
  36. `Shift-F1'
  37. `Shift-F2'
  38. `Shift-F3'
  39.      Set the position of mark #1, #2 or #3, depending on the function
  40.      key.
  41. `Ctrl-x Ctrl-x'
  42.      Swap the positions of the cursor and the `auto-mark'.
  43. `Ctrl-@'
  44.      Set the position of the `auto-mark'.
  45.    ---------- Footnotes ----------
  46.    (1)  There is no reason why you can't have more, the editor sets no
  47. limitation on the number of marks available. This is just how I have
  48. set the editor up.
  49. File: jade.info,  Node: Interrupting Jade,  Next: Recursive Editing,  Prev: Using Marks,  Up: Using Jade
  50. Interrupting Jade
  51. =================
  52.    It is often useful to be able to tell Jade to quit whatever it is
  53. doing and wait for more commands; this is called "interrupting" Jade.
  54. When the editor receives an interrupt signal it will abort what it is
  55. doing and rewind itself back to the inner-most recursive edit (see
  56. *note Recursive Editing::.).
  57.    The interrupt signal differs with the operating system being used,
  58.    * Under Unix the `SIGINT' signal is used, this can be sent via the
  59.      `intr' character (get the editor into the foreground of the shell
  60.      it was started from and type `Ctrl-c' in the shell's terminal), or
  61.      directly through the `kill' shell command. For example, look at
  62.      the following shell session extract,
  63.           /var/src/jade/man$ ps
  64.             PID TT STAT  TIME COMMAND
  65.              60  1 SW    0:02 (xinit)
  66.              87  1 S     0:08 fvwm
  67.             127 p0 S     0:00 /bin/bash
  68.             155 p0 S     0:04 jade
  69.             156 p1 S     0:00 /bin/bash
  70.             159 p1 R     0:00 ps
  71.           /var/src/jade/man$ kill -INT 155
  72.      First the `ps' command is used to find the Jade process' pid (155),
  73.      then the `kill' command is used to send the `INT' signal to this
  74.      process.
  75.    * The `Ctrl-c' signal is also used on Amigas, either type this in
  76.      the console window that Jade was launched from or use the `break'
  77.      (or possibly `breaktask') command to send the signal.
  78. File: jade.info,  Node: Recursive Editing,  Next: Character Images,  Prev: Interrupting Jade,  Up: Using Jade
  79. Recursive Editing
  80. =================
  81.    Recursive editing is the act of editing a file while the current
  82. command is still being evaluated. For example, when using the
  83. `query-replace' command (`Meta-%') the `Ctrl-r' command enters a
  84. recursive edit to let you edit the buffer, even though you are still
  85. doing a query-replace (which will be resumed when the recursive edit
  86. finishes).
  87.    As the name suggests a recursive edit calls the editor's main command
  88. loop recursively from within a command. Any number of recursive edits
  89. may be stacked up and then unwound back to the top-level of the editor.
  90.    When a recursive edit is in progress the name of the mode being used
  91. to edit the buffer is shown in *square brackets*, not parentheses as in
  92. the top-level instance.
  93.    The commands for manipulating recursive edits are as follows,
  94. `Ctrl-]'
  95. `Ctrl-Meta-c'
  96.      Exit the innermost recursive edit, this has no effect at the
  97.      top-level.
  98. `Meta-x top-level'
  99.      Return to the outermost edit -- the top-level. This is useful when
  100.      you get "lost" inside a sequence of recursive edits.
  101. `Meta-x recursive-edit'
  102.      Enter a new recursive edit; this command is usually best avoided to
  103.      save confusion.
  104.    In general, recursive editing is rarely used except in unavoidable
  105. circumstances (i.e. in the Lisp debugger).
  106. File: jade.info,  Node: Character Images,  Next: Client Editing,  Prev: Recursive Editing,  Up: Using Jade
  107. Character Images
  108. ================
  109.    In general any character can be mapped to any sequence of up to four
  110. character sized images (called glyphs) when it is drawn into a window.
  111. The TAB character is a notable exception; it expands to as many spaces
  112. as are needed to fill up to the next tab stop.
  113.    By default, the editor is set up to display the following,
  114. 0 to 31
  115.      A caret (`^') followed by the ASCII value of the character
  116.      exclusive-or'd with 0x40, i.e. `^@' to `^_'.
  117. 32 to 126
  118.      Printed literally, this includes all "normal" characters and
  119.      punctuation.
  120.      `^?'
  121. 128 to 255
  122.      Represented by the octal escape sequence (i.e. `\200') for that
  123.      character's numeric value.
  124.    If you want to edit files containing characters in the `Latin1'
  125. character set (numerically, from 160 to 255) you can put the following
  126. in your `.jaderc' file,
  127.      (latin-1-mode)
  128. this will redefine the necessary characters.
  129.    If you want more details about this sort of thing see *Note Glyph
  130. Tables::.
  131. File: jade.info,  Node: Client Editing,  Next: Compiling Programs,  Prev: Character Images,  Up: Using Jade
  132. Client Editing
  133. ==============
  134.    Normally you will only have one instance of Jade executing at a
  135. single time. Often though, another program will want you to edit a
  136. file, for example when you are composing a mail message. There is
  137. normally a way to specify which editor you want to use, for example the
  138. `EDITOR' environment variable.
  139.    If you were to ask to edit the file in `jade' an *additional*
  140. process executing Jade would be started, totally separate from the
  141. original. It is possible to use the original instance.
  142.    Firstly Jade must be set up to listen for clients wanting files
  143. edited, this is done with the `server-open' command. You can either put
  144. this in your `.jaderc' file (with a line like `(server-open)') or call
  145. it manually with the command `Meta-x server-open'.
  146.    Only one instance of Jade may be a server at once. If you know that
  147. there is no other Jade running but it still won't let you open a
  148. server, and you are running on Unix, look for a dead socket called
  149. `~/.Jade_rendezvous' and delete it if necessary.
  150.    Once the editor is listening for client messages the separate program
  151. `jadeclient' may be used to load files into the server from an external
  152. source. The format of `jadeclient' invocation is,
  153.      jadeclient [+LINE-NUMBER] FILE-NAME ...
  154. When invoked, it will ask the server to edit each FILE-NAME (initially
  155. positioned at line LINE-NUMBER) in turn, exiting only after each file
  156. has finished being edited.
  157.    If when the `jadeclient' program is invoked their is no server open
  158. (i.e. either Jade is not running or you haven't used the `server-open'
  159. function) a message `Jade not running, waiting...' will be printed and
  160. `jadeclient' will sit waiting for you to open a Jade server.
  161.    So, simply get the program you want to use Jade to use the
  162. `jadeclient' program as its editor. For example, I use `mh' to handle
  163. my electronic mail; in my `~/.mh_profile' file I have the line,
  164.      Editor: jadeclient
  165. to tell it that I want to edit my mail in Jade.
  166.    The one special command for client/server editing is,
  167. `Ctrl-x #'
  168.      If the file being edited in the current buffer is a client file,
  169.      tell the client program which loaded it that it has finished being
  170.      edited. The actual buffer is *not* deleted.
  171.    It is also possible to finish editing a client file by simple
  172. deleting its buffer in the normal way (`Ctrl-x k'), *Note Deleting
  173. Buffers::.
  174. File: jade.info,  Node: Compiling Programs,  Next: Info Mode,  Prev: Client Editing,  Up: Using Jade
  175. Compiling Programs
  176. ==================
  177.    Jade has a number of features to help you develop programs, foremost
  178. is the ability to run a compilation inside one of the editor's buffers.
  179. Unfortunately, this is only possible when using the Unix operating
  180. system at the present.
  181.    Once the compilation has finished you can then step through each
  182. error produced.
  183. * Menu:
  184. * Running a Compilation::       Launching a compilation process
  185. * Finding Errors::              Stepping through compile errors
  186. * Debugging Programs::          Using GDB in an editor buffer
  187. * Using Grep::                  Searching files for a regexp
  188. * Keeping ChangeLogs::          Simple recording of file revisions
  189. File: jade.info,  Node: Running a Compilation,  Next: Finding Errors,  Up: Compiling Programs
  190. Running a Compilation
  191. ---------------------
  192.    The command to run a shell command in a buffer is,
  193. `Meta-x compile'
  194.      Prompts you for the command to execute, with a default of the last
  195.      command you ran (starts as `make'). A shell process is created
  196.      which runs asynchronously to the editor in the same directory as
  197.      the current buffer's file was loaded from. The buffer
  198.      `*compilation*' is selected and this is where all output from the
  199.      program is printed.
  200.    When the process finishes running a message is printed in the
  201. `*compilation*' buffer telling you its exit-code.
  202.    Only one process may be run with the `compile' function at once.
  203.    This command is not available on the Amiga version yet.
  204. File: jade.info,  Node: Finding Errors,  Next: Debugging Programs,  Prev: Running a Compilation,  Up: Compiling Programs
  205. Finding Errors
  206. --------------
  207.    When you have compiled something with the `Meta-x compile' command
  208. it is possible to step through each of the errors that it produces. To
  209. do this use the command,
  210. `Ctrl-x `'
  211.      Displays the next error in the `*compilation*' buffer. The file
  212.      that is in is loaded (if necessary) and the line with the error is
  213.      found.
  214.    If you edit a file which has errors in it, then try to find the next
  215. error (which is in the same file) everything will still work. The
  216. positions of errors are updated as the buffers are modified.
  217.    The only exception to this is when you invoke the `next-error'
  218. function while the `*compilation*' buffer is still being written to. If
  219. more errors are produced in a file which has been modified since the
  220. compilation started it is likely that the positions will get out of
  221. sync.
  222.    By default, the `next-error' function understands the type of error
  223. output that `gcc' produces. This is of the form,
  224.      FILE:LINE-NUMBER:DESCRIPTION
  225.    It is possible to use other formats though, the variables which
  226. control this are,
  227.  - Variable: compile-error-regexp
  228.      Regular expression to match a line containing an error. For `gcc'
  229.      this is `^(.*):([0-9]+):(.+)'.
  230.  - Variable: compile-file-expand
  231.      Expansion template to produce the name of the file with the error,
  232.      using `compile-error-regexp' and the line containing the error. By
  233.      default this is `\1'.
  234.  - Variable: compile-line-expand
  235.      Similar to `compile-file-expand' except that it expands to a string
  236.      defining the number of the line with the error. By default, `\2'.
  237.  - Variable: compile-error-expand
  238.      Similar to `compile-file-expand', but produces the description of
  239.      the error. By default, `\3'.
  240. File: jade.info,  Node: Debugging Programs,  Next: Using Grep,  Prev: Finding Errors,  Up: Compiling Programs
  241. Debugging Programs
  242. ------------------
  243.    Jade allows you to run the GDB debugger in a buffer. Some of the
  244. advantages of this over the usual terminal based interaction are,
  245.    * The current position of the target program (its "frame") is
  246.      highlighted; the source file is displayed in a separate window
  247.      with the current frame marked (in the same way that a block is
  248.      marked).
  249.    * You are able to set and delete breakpoints simply by putting the
  250.      cursor on the line you wish the target to stop at and typing an
  251.      editor command.
  252.    To start a gdb subprocess use the `Meta-x gdb' command, you will be
  253. asked to enter the name of the program to debug then gdb will be
  254. started in a new buffer (called `*gdb*' or similar). You are then able
  255. to type commands into the buffer, they will be sent to gdb each time
  256. you type the RET key.
  257.    The commands for controlling the gdb subprocess are as follows (the
  258. `Ctrl-c' prefixed commands are only available within the `*gdb*' buffer
  259. whereas the `Ctrl-x Ctrl-a' variations are accessible globally so that
  260. they can be invoked from within the target's source files),
  261. `Ctrl-c Ctrl-n'
  262. `Ctrl-x Ctrl-a Ctrl-n'
  263.      Continue execution to the next source line, this is the gdb command
  264.      `next'.
  265. `Ctrl-c Ctrl-s'
  266. `Ctrl-x Ctrl-a Ctrl-s'
  267.      Continue execution until a different source line is reached, this
  268.      is the gdb command `step'.
  269. `Ctrl-c Ctrl-f'
  270. `Ctrl-x Ctrl-a Ctrl-f'
  271.      Continue running until the current stack frame exits, the `finish'
  272.      command.
  273. `Ctrl-c Ctrl-r'
  274. `Ctrl-x Ctrl-a Ctrl-r'
  275.      Resume execution until a breakpoint is reached or the target exits.
  276. `Ctrl-c Ctrl-<'
  277. `Ctrl-x Ctrl-a Ctrl-<'
  278.      Display the stack frame above the current one.
  279. `Ctrl-c Ctrl->'
  280. `Ctrl-x Ctrl-a Ctrl->'
  281.      Display the stack frame under the current one.
  282. `Ctrl-c Ctrl-b'
  283. `Ctrl-x Ctrl-a Ctrl-b'
  284.      Set a breakpoint at the current source line, if the `*gdb*' buffer
  285.      is active the line selected is where the program last stopped.
  286. `Ctrl-c Ctrl-t'
  287. `Ctrl-x Ctrl-a Ctrl-t'
  288.      Set a temporary breakpoint at the current source line.
  289. `Ctrl-c Ctrl-d'
  290. `Ctrl-x Ctrl-a Ctrl-d'
  291.      Remove all breakpoints which are set at the current source line.
  292. `Ctrl-c Ctrl-l'
  293. `Ctrl-x Ctrl-a Ctrl-l'
  294.      Redisplay the current frame, centring it in its window.
  295.    For a summary of these commands type `Ctrl-h m' in the `*gdb*'
  296. buffer.
  297.    Since the gdb process runs on top of the Shell mode the bindings from
  298. that mode are also available.
  299.    There is no limit to the number of gdb processes you may run at once,
  300. each will get its own buffer. When a gdb command is invoked in a buffer
  301. which doesn't have a gdb subprocess (i.e. a source file's buffer) the
  302. command will be sent to the gdb process which either was last sent a
  303. command, or last made the editor display a new frame. Hopefully this
  304. will work fairly intuitively.
  305. File: jade.info,  Node: Using Grep,  Next: Keeping ChangeLogs,  Prev: Debugging Programs,  Up: Compiling Programs
  306. Using Grep
  307. ----------
  308.    It is often very useful to grep through a set of files looking for a
  309. regular expression, this is what the `grep' command does. With Jade it
  310. is possible to run an external `grep' program in the `*compilation*'
  311. buffer. This then enables you to step through each grep hit using the
  312. `Ctrl-x `' command, *Note Finding Errors::.
  313.    The commands to use grep are,
  314. `Meta-x grep'
  315.      Prompt for a string of arguments to give `grep', you do not need to
  316.      provide the name of the program, or the `-n' switch, this is done
  317.      automatically. The shell will do any filename-globbing on the
  318.      arguments so it is advisable to surround the regular expression
  319.      with single quotes.
  320.      Note that the regular expression syntax will be different to that
  321.      which Jade uses. Also this command won't work on an Amiga.
  322. `Meta-x grep-buffer'
  323.      This command provides a method for scanning the current buffer for
  324.      all lines matching a regular expression (which you are prompted
  325.      for). It is written entirely in Lisp -- this means that the normal
  326.      regular expression syntax is needed and it will work on an Amiga.
  327. File: jade.info,  Node: Keeping ChangeLogs,  Prev: Using Grep,  Up: Compiling Programs
  328. Keeping ChangeLogs
  329. ------------------
  330.    A ChangeLog is a file (usually called `ChangeLog') which keeps a log
  331. of all changes you have made to the files in its directory. For
  332. example, the `src/ChangeLog' file for Jade keeps a list of changes made
  333. to the editor's source code.
  334.    There is no magic involved, you simply use a command to add a new
  335. entry to a directory's log after modifying a file in that directory.
  336. You then have to enter a summary of the changes that you made.
  337.    The command to do this is,
  338. `Meta-a'
  339.      Prompts for the name of a directory then lets you type a
  340.      description of the changes you have made.
  341.    If you enter more than one change in the same day (and from the same
  342. host) the same heading will be used. The heading consists of the time
  343. and date, your name, your login and the name of the host you're on. (1)
  344.    ---------- Footnotes ----------
  345.    (1)  On the Amiga there is no way to get these details. So, Jade
  346. looks for some environment variables, `USERNAME' for the login name,
  347. `HOSTNAME' for the name of the host and `REALNAME' for your actual name.
  348. File: jade.info,  Node: Info Mode,  Next: Shell,  Prev: Compiling Programs,  Up: Using Jade
  349. Info Mode
  350. ---------
  351.    Despite the name of this section there is actually no such thing as
  352. the `info-mode'. The Lisp file `info.jl' is what this section documents
  353. -- it is a set of Lisp functions which make a buffer (the `*Info*'
  354. buffer) into a simple browser for Info files(1).
  355.    To invoke it type `Ctrl-h i', the `*Info*' buffer will be selected
  356. showing the `(dir)' node (the root of the Info documentation tree).
  357.    When in the `*Info*' buffer the following key bindings are available.
  358. `SPC'
  359.      Displays the next page of the current node.
  360. `Backspace'
  361.      Displays the previous page.
  362.      Move to the specified menu-item (`1' means the first, etc) in the
  363.      menu in this node. The keys `1' to `9' work in this way.
  364.      Move to the beginning of the current node.
  365.      Display the directory node (`(dir)') of the Info documentation
  366.      tree.
  367.      Follow a reference, the one under the cursor if one exists.
  368.      Prompt for the name of a node and try to display it.
  369.      Display the Info tutorial node (`(info)Help').
  370.      Go back to the last node that was displayed before this one.
  371.      Prompts for a menu-item (the one on the same line as the cursor is
  372.      the default) and display the node it points to.
  373.      Display the next node.
  374.      Display the previous node.
  375.      Display the node "above" this one.
  376.      Quit the Info browser.
  377.      Display a piece of text describing all commands available in Info
  378.      mode.
  379. `RET'
  380.      Go to the link (menu item or xref) described on the current line.
  381. `LMB-Click2'
  382.      Go to the link you double clicked on.
  383. `TAB'
  384.      Put the cursor on the next link in this node.
  385. `Meta-TAB'
  386.      Put the cursor on the previous link.
  387.    This mode has a number of disadvantages over the other Info browsers
  388. available (i.e. the stand-alone `info' program, or Emacs' Info viewer):
  389.    * It depends wholly on being able to find a tag table in the Info
  390.      file, if it can't it will simply load the whole file into the
  391.      buffer.
  392.    * There is no support for the `*' node name.
  393.    * Seems not to work 100% with files formatted by Emacs, `makeinfo'
  394.      formatted files work properly though.
  395.    * No editing of nodes.
  396.    Of course, its main advantage is that it runs in Jade!
  397.    ---------- Footnotes ----------
  398.    (1)  `Info' is the GNU way of creating hypertext documents, for more
  399. information see *Note Info: (info)Top.
  400. File: jade.info,  Node: Shell,  Next: Simple Customisation,  Prev: Info Mode,  Up: Using Jade
  401. Shell
  402. =====
  403.    When running on a Unix-style operating system Jade allows you to run
  404. a shell subprocess in a buffer (usually the `*shell*' buffer). Each
  405. line you type in the buffer is sent to the shell and the output from
  406. the shell is displayed in the buffer.
  407. `Meta-x shell'
  408.      Start a new shell subprocess running in a buffer called `*shell*'.
  409.      If a buffer `*shell*' already exists a new buffer with a unique
  410.      name will be opened (i.e. `*shell*<2>').
  411.      The working directory of the shell subprocess will be the directory
  412.      which the contents of the current buffer was read from.
  413.      This command won't work on Amigas!
  414.    Each `*shell*' buffer installs the major mode `shell-mode'.  This
  415. provides the following commands.
  416. `Ctrl-a'
  417.      Move the cursor to the beginning of the current line, *after* the
  418.      prompt which the shell printed (if one exists).
  419. `Ctrl-d'
  420.      If the cursor is at the end of the buffer send the shell process
  421.      the `eof' character (`^D') (signifying the end of the file).
  422.      Otherwise delete the character under the cursor.
  423. `RET'
  424.      Send the current line to the shell (minus any prompt at the
  425.      beginning of the line). If the cursor is not on the last line of
  426.      the buffer (i.e.  the most recent prompt) the current line is
  427.      copied to the end of the buffer before being sent.
  428. `Ctrl-c Ctrl-n'
  429.      Move the cursor to the next prompt in the buffer.
  430. `Ctrl-c Ctrl-p'
  431.      Move to the previous prompt.
  432. `Ctrl-c Ctrl-c'
  433.      Send the `intr' character (`^C') to the shell process.
  434. `Ctrl-c Ctrl-d'
  435.      Send the `eof' character (`^D') to the shell.
  436. `Ctrl-c Ctrl-z'
  437.      Send the `susp' character (`^Z') to the shell.
  438. `Ctrl-c Ctrl-\'
  439.      Send the `quit' character (`^\') to the shell.
  440.  - Hook: shell-mode-hook
  441.      This hook is evaluated by the Shell mode after it has initialised
  442.      itself (and started its subprocess).
  443.    The following variables customise the actions of the Shell mode.
  444.  - Variable: shell-file-name
  445.      This variable defines the file name of the shell to run. Its
  446.      default value is either the value of the environment variable
  447.      `SHELL' or if that doesn't exist the file `/bin/sh'.
  448.  - Variable: shell-whole-line
  449.      When this variable's value is non-`nil' the RET command always
  450.      sends the whole of the current line (minus any prompt) even when
  451.      the cursor is not at the end of the line. Otherwise only the part
  452.      of the line before the cursor is sent.
  453.      The default value of this variable is `t'.
  454.  - Variable: shell-prompt-regexp
  455.      This buffer-local variable defines the regular expression used to
  456.      match the prompt printed by the shell each time it waits for you
  457.      to enter a shell command. By default it has the value
  458.      `^[^]#$%>)]*[]#$%>)] *' but this may be incorrect if you have
  459.      modified your shell's prompt.
  460. File: jade.info,  Node: Simple Customisation,  Prev: Shell,  Up: Using Jade
  461. Simple Customisation
  462. ====================
  463.    The best way to tailor the editor to your own requirements is with
  464. your personal startup file. This is called `.jaderc' in your home
  465. directory (1), it is a file of Lisp forms evaluated when Jade
  466. initialises itself.
  467.    Usually, setting the values of variables in your startup file is
  468. enough to configure Jade how you want, the Lisp function to set a
  469. variable is called `setq', it's first argument is the name of the
  470. variable, it's second the value you wish to set it to. This value will
  471. usually be one of the following data types,
  472. `"xyz"'
  473.      A string `xyz'.
  474. `123'
  475. `0173'
  476. `0x7b'
  477.      A number, all of the above have the value 123 (in decimal, octal
  478.      and hexadecimal).
  479. `nil'
  480.      A boolean value, `nil' means false, or not true. `t' is the
  481.      opposite (in fact, any value not `nil' is true).
  482.    My `.jaderc' file looks something like this (note that semicolons
  483. introduce comments),
  484.      ;;;; .jaderc -*-Lisp-*-
  485.      
  486.      ;; Size of tabs for Lisp source is 2
  487.      (setq lisp-body-indent 2)
  488.      
  489.      ;; When on an Amiga, flag that I don't want pull down menus
  490.      (when (amiga-p)
  491.        (setq amiga-no-menus t))
  492.      
  493.      ;; When editing English-text use auto-filling
  494.      (add-hook 'text-mode-hook 'fill-mode-on)
  495.      
  496.      ;; -with a maximum of 74 characters in a line
  497.      (setq fill-column 74)
  498.      
  499.      ;; Start the edit server
  500.      (server-open)
  501.    Most simple customisations can be achieved by simply giving a
  502. variable a new value. Use the `setq' special form to do this (a special
  503. form is a type of function) as in the examples above. If you wish to
  504. set variables interactively use the `set' command:
  505.      `Meta-x set RET VARIABLE-NAME RET NEW-VALUE RET'.
  506.    The `add-hook' function adds a function (in this case `fill-mode-on')
  507. to be called when the specified hook (in this case `text-mode-hook') is
  508. evaluated. The single-quote before the names means that the names are
  509. passed as constants; *not* their values. If you don't quite understand
  510. what I'm talking about don't worry.
  511.    For full documentation of Jade's programming language see *Note
  512. Programming Jade::.
  513.    ---------- Footnotes ----------
  514.    (1)  On the Amiga, your home directory is defined as the contents of
  515. the environment variable `HOME'.
  516. File: jade.info,  Node: Programming Jade,  Next: Reporting Bugs,  Prev: Using Jade,  Up: Top
  517. Programming Jade
  518. ****************
  519.    This chapter of the manual is a full guide to Jade's Lisp programming
  520. language, including documentation for most of the built-in functions.
  521. * Menu:
  522. * Intro::                       Introduction and Lisp conventions
  523. * Data Types::                  Data types and values in Lisp
  524. * Numbers::                     Integers and arithmetic functions
  525. * Sequences::                   Ordered sequences of data values
  526. * Symbols::                     Symbols are uniquely named objects
  527. * Evaluation::                  Evaluating expressions
  528. * Control Structures::          Special forms. Conditionals, loops, etc...
  529. * Variables::                   Symbols represent named variables
  530. * Functions::                   Functions are the building blocks of Lisp
  531.                                   programs
  532. * Macros::                      User-defined control structures
  533. * Streams::                     Data sinks and sources; character streams
  534. * Loading::                     Programs are stored in files
  535. * Compiled Lisp::               Making programs run faster
  536. * Hooks::                       Hooks allow the extending of Jade
  537. * Buffers::                     Buffers allow editing of files
  538. * Windows::                     Windows receive input and display buffers
  539. * Positions::                   Coordinates in buffers and cursor movement
  540. * Marks::                       Marks represent the position of a character
  541.                                   in a file
  542. * Glyph Tables::                Controlling the glyphs rendered for each
  543.                                   ASCII character
  544. * Input Events::                Objects which represent input events
  545. * Keymaps::                     Mappings between events and commands
  546. * Event Loop::                  The event loop reads input events and
  547.                                   invokes commands
  548. * Editing Files::               Files are edited in buffers
  549. * Text::                        Functions to edit buffers with
  550. * Writing Modes::               Creating new editing modes
  551. * Prompting::                   Interactively asking the user a question
  552. * Files::                       Manipulating files in the filing system
  553. * Processes::                   Jade can launch and control subprocesses
  554.                                   when running under Unix
  555. * Miscellaneous Functions::     Functions which don't fit elsewhere in
  556.                                   this manual
  557. * Debugging::                   How to debug Lisp programs
  558. * Tips::                        General recommendations for Lisp programmers
  559. File: jade.info,  Node: Intro,  Next: Data Types,  Up: Programming Jade
  560. Introduction
  561. ============
  562.    As you have probably gathered by now, Jade is largely controlled by
  563. its built in programming language: a dialect of Lisp containing many
  564. extensions (non-standard data types and functions) to make it suitable
  565. for controlling an editor. Through this language Jade can be customised
  566. and extended.
  567.    I have attempted to make the "standard" portion of the language (i.e.
  568. anything a normal Lisp would have; not related to editing) as compatible
  569. with GNU Emacs Lisp as possible. In some areas this rule doesn't apply,
  570. there will usually be a good reason for this. A few functions have been
  571. inspired by Common Lisp.
  572.    The areas of the language which control the *editor* are *not*
  573. compatible with Emacs; some functions may be similar but since the two
  574. editors are fundamentally different I have not attempted to conform with
  575. the Emacs API.
  576.    All programs written using only the information in this manual should
  577. be compatible with future revisions of Jade.
  578.    This following sections explain some of the most important Lisp
  579. concepts and the conventions I've used in this manual.
  580. * Menu:
  581. * nil and t::                   Boolean values in Lisp
  582. * The Lisp Reader::             Basic program structure
  583. * Notation::                    Special glyphs used
  584. * Descriptions::                How functions and variables are documented
  585. File: jade.info,  Node: nil and t,  Next: The Lisp Reader,  Up: Intro
  586. nil and t
  587. ---------
  588.    The two boolean values in Lisp are the symbols `nil' (FALSE) and `t'
  589. (TRUE). Both these symbols always evaluate to themselves (so they do
  590. not have to be quoted), any attempt to change their values is an error.
  591.    All of the conditional instructions regard *anything* which is not
  592. `nil' as being TRUE (i.e. not-FALSE). The actual symbol `t' should be
  593. used where a TRUE boolean value must be explicitly stated to increase
  594. the clarity of the code.
  595.    This is not the end of the story; `nil' actually has another meaning:
  596. it represents the empty list. This is a consequence of how lists are
  597. constructed in Lisp, a list of zero elements is stored as the symbol
  598. `nil'.
  599.    To the Lisp system itself there is absolutely no difference between
  600. `()' (the notation for a list with zero elements) and `nil' (the symbol
  601. nil).  When writing code however, the list notation is usually used
  602. when the programmer regards the value as a list and the `nil' notation
  603. when its value as a boolean is to be emphasised.
  604. File: jade.info,  Node: The Lisp Reader,  Next: Notation,  Prev: nil and t,  Up: Intro
  605. The Lisp Reader
  606. ---------------
  607.    Lisp programs and functions are stored internally as normal Lisp data
  608. objects, the Lisp Reader is the process used to translate textual
  609. descriptions of Lisp objects into the data structures used to represent
  610. the objects.
  611.    The Lisp Reader is the collection of internal functions accessed by
  612. the `read' Lisp function. It reads a character at a time from an input
  613. stream until it has parsed a whole Lisp object.
  614.    *Note Data Types::.
  615. File: jade.info,  Node: Notation,  Next: Descriptions,  Prev: The Lisp Reader,  Up: Intro
  616. Notation
  617. --------
  618.    Wherever an example of evaluating a Lisp form is shown it will be
  619. formatted like this,
  620.      (+ 1 2)
  621.          => 3
  622. The glyph `=>' is used to show the computed value of a form.
  623.    When two forms are shown as being exactly equivalent to one another
  624. the glyph `==' is used, for example,
  625.      (car some-variable) == (nth 0 some-variable)
  626.    Evaluating some forms result in an error being signalled, this is
  627. denoted by the `error-->' glyph.
  628.      (read-file "/tmp/foo")
  629.          error--> File error: No such file or directory, /tmp/foo
  630. File: jade.info,  Node: Descriptions,  Prev: Notation,  Up: Intro
  631. Descriptions
  632. ------------
  633.    The simplest type of descriptions are the descriptions of variables
  634. (*note Variables::.), they look something like,
  635.  - Variable: grains-of-sand
  636.      This imaginary variable contains the number of grains of sand in a
  637.      one-mile long stretch of an averagely sandy beach.
  638.    Hooks (*note Hooks::.) are also described in this format, the only
  639. difference is that `Variable:' is replaced by `Hook:'.
  640.    Functions (*note Functions::.) and macros (*note Macros::.) have
  641. more complex descriptions; as well as the name of the thing being
  642. described, they also have a list of arguments which the thing will
  643. accept. Each argument in the list is named and may be referred to in
  644. the body of the description.
  645.    Two `special' arguments may be used, `&optional' and `&rest'.  They
  646. have the same meaning as when used in the lambda-list of a function
  647. definition (*note Lambda Expressions::.), that is `&optional' means
  648. that all further arguments are optional, and `&rest' means that zero or
  649. more argument values are coalesced into a list to be used as the value
  650. of the following argument.
  651.    An example function definition follows.
  652.  - Function: useless-function FIRST &optional SECOND &rest TAIL
  653.      This function returns a list consisting of the values SECOND (when
  654.      undefined the number 42 is used), all the items in the list TAIL
  655.      and FIRST.
  656.           (useless-function 'foo 'bar 'xyz 20)
  657.               => (bar xyz 20 foo)
  658.           
  659.           (useless-function '50)
  660.               => (42 50)
  661.    Macros and commands (*note Commands::.) are defined in the same way
  662. with `Macro:' or `Command:' replacing `Function:'.
  663.    Special forms (*note Special Forms::.) are described similarly to
  664. functions except that the argument list is formatted differently since
  665. special forms are, by definition, more flexible in how they treat their
  666. arguments. Optional values are enclosed in square brackets
  667. (`[OPTIONAL-ARG]') and three dots (`REPEATED-ARG...') indicate where
  668. zero or more arguments are allowed.
  669. File: jade.info,  Node: Data Types,  Next: Numbers,  Prev: Intro,  Up: Programming Jade
  670. Data Types
  671. ==========
  672.    The way that data values are represented in Lisp is fundamentally
  673. different to more "conventional" languages such as C or Pascal: in Lisp
  674. each piece of data (a "Lisp Object") has two basic attributes, the
  675. actual data and a tag value defining the *type* of the object. This
  676. means that type checking is performed on the actual data itself, not on
  677. the "variable" holding the data.
  678.    All Lisp objects are a member of one of the primitive types; these
  679. are types built into the Lisp system and can represent things like
  680. strings, integers, cons cells, vectors, etc...
  681.    More complex types of object can be constructed from these primitive
  682. types, for example a vector of three elements could be regarded as a
  683. type `triple' if necessary. In general, each separate type provides a
  684. predicate function which returns `t' when applied to an object of its
  685. type.
  686. * Menu:
  687. * Types Summary::               List of the most common types
  688. * Read Syntax::                 Some types can be constructed from source code
  689. * Printed Representation::      All types can be printed
  690. * Equality Predicates::         How to test two objects for equality
  691. * Comparison Predicates::       Comparing two objects as scalars
  692. * Type Predicates::             Each type has a predicate defining it
  693. * Garbage Collection::          Reusing memory from stale objects
  694. File: jade.info,  Node: Types Summary,  Next: Read Syntax,  Up: Data Types
  695. Types Summary
  696. -------------
  697.    Each separate data type is documented in its own section, this is a
  698. just a table of the more common types.
  699. "Integer"
  700.      32-bit signed integers. *Note Numbers::.
  701. "Cons cell"
  702.      An object containing two other Lisp objects. *Note Cons Cells::.
  703. "List"
  704.      A sequence of objects, in Lisp lists are not primitive types,
  705.      instead they are made by chaining together Cons cells. *Note
  706.      Lists::.
  707. "Vector"
  708.      A one-dimensional array of objects. *Note Vectors::.
  709. "String"
  710.      A vector of characters. *Note Strings::.
  711. "Array"
  712.      An ordered sequence of objects which can be accessed in constant
  713.      time, either a vector or a string. *Note Sequences::.
  714. "Sequence"
  715.      An ordered sequence of objects, either a list or an array.  *Note
  716.      Sequences::.
  717. "Symbol"
  718.      A symbol is a named object; they are used to provide named
  719.      variables and functions. *Note Symbols::.
  720. "File"
  721.      A link to a file in the operating system's filing system, allows
  722.      access to the file as a stream. *Note Files::.
  723. "Stream"
  724.      Serial data sinks and sources. *Note Streams::.
  725. "Void"
  726.      No type, only used in symbols to represent an unset function or
  727.      variable value.
  728. "Buffer"
  729.      A "space" in which text can be edited, buffers may be displayed in
  730.      a window and hence edited by the user. *Note Buffers::.
  731. "Window"
  732.      A physical window in the underlying window-system, used for input
  733.      and output.
  734. "Position"
  735.      A pair of integers, used to represent the coordinates of a
  736.      character in a buffer. *Note Positions::.
  737. "Mark"
  738.      A position in a specified file, this file may either be a buffer
  739.      in memory or a named file. *Note Marks::.
  740. "Process"
  741.      An object through which processes may be created and controlled.
  742.      *Note Processes::.
  743. "Glyph Table"
  744.      A lookup-table which is used to map characters in a buffer to the
  745.      sequence of glyphs they are rendered as. *Note Glyph Tables::.
  746. "Keymap"
  747.      A set of key-sequence-to-command mappings; when installed in a
  748.      buffer it controls how the editor reacts to all input from the
  749.      user. *Note Keymaps::.
  750. "Event"
  751.      An (input-) event from a window.
  752. File: jade.info,  Node: Read Syntax,  Next: Printed Representation,  Prev: Types Summary,  Up: Data Types
  753. Read Syntax
  754. -----------
  755.    As previously noted the Lisp reader translates textual descriptions
  756. of Lisp objects into the object they describe (source files are simply
  757. descriptions of objects). However, not all data types can be created in
  758. this way: in fact the only types which can are integers, strings,
  759. symbols, cons cells (or lists) and vectors, all others have to be
  760. created by calling functions.
  761.    Note that comments in a Lisp program are introduced by the semi-colon
  762. character (`;'). Whenever the Lisp reader encounters a semi-colon where
  763. it's looking for the read syntax of a new Lisp object it will discard
  764. the rest of the line of input. *Note Comment Styles::.
  765.    The "read syntax" of an object is the string which when given to the
  766. reader as input will produce the object. The read syntax of each type
  767. of object is documented in that type's main section of this manual but
  768. here is a small taste of how to write each type.
  769. Integers
  770.      An integer is simply the number written in either decimal, octal
  771.      (when the number is preceded by `0') or hexadecimal (when the
  772.      number is preceded by `0x'). An optional minus sign may be the
  773.      first character in a number. Some examples are,
  774.           42
  775.               => 42
  776.           
  777.           0177
  778.               => 127
  779.           
  780.           0xff
  781.               => 255
  782.           
  783.           -0x10
  784.               => -16
  785. Strings
  786.      The read syntax of a string is simply the string with a
  787.      double-quote character (`"') at each end, for more details see
  788.      *Note Strings::.
  789.           "This is a string"
  790. Cons cells
  791.      A cons cell is written in what is known as "dotted pair notation"
  792.      and is just the two objects in the cell separated by a dot and the
  793.      whole thing in parentheses,
  794.           (CAR . CDR)
  795. Lists
  796.      The syntax of a list is similar to a cons cell (since this is what
  797.      lists are made of): no dot is used and there may be zero or more
  798.      objects,
  799.           (OBJECT1 OBJECT2 OBJECT3 ...)
  800.           
  801.           ("foo" ("bar" "baz") 100)
  802.      The second example is a list of three elements, a string, another
  803.      list and a number.
  804. Vectors
  805.      The read syntax of a vector is very similar to that of a list,
  806.      simply use square brackets instead of parentheses,
  807.           [OBJECT1 OBJECT2 OBJECT3 ...]
  808. Symbols
  809.      A symbol's read syntax is simply its name, for example the read
  810.      syntax of a symbol called `my-symbol' is,
  811.           my-symbol
  812. File: jade.info,  Node: Printed Representation,  Next: Equality Predicates,  Prev: Read Syntax,  Up: Data Types
  813. Printed Representation
  814. ----------------------
  815.    The "printed representation" of an object is the string produced
  816. when the object is printed (with one of the `print' functions), this
  817. will usually be very similar to the read syntax of the object (*note
  818. Read Syntax::.).
  819.    Objects which do not have a read syntax *do* have a printed
  820. representation, it will normally be of the form,
  821.      #<relevant text>
  822. where the "relevant text" is object-dependent and usually describes the
  823. object and its contents. The reader will signal an error if it
  824. encounters a description of an object in the format `#<...>'.
  825. File: jade.info,  Node: Equality Predicates,  Next: Comparison Predicates,  Prev: Printed Representation,  Up: Data Types
  826. Equality Predicates
  827. -------------------
  828.  - Function: eq ARG1 ARG2
  829.      Returns `t' when ARG1 and ARG2 are the same object. Two objects
  830.      are the same object when they occupy the same place in memory and
  831.      hence modifying one object would alter the other. The following
  832.      Lisp fragments may illustrate this,
  833.           (eq "foo" "foo")    ;the objects are distinct
  834.               => nil
  835.           
  836.           (eq t t)        ;the same object -- the symbol `t'
  837.               => t
  838.      Note that the result of `eq' is undefined when called on two
  839.      integer objects with the same value, see `eql'.
  840.  - Function: equal ARG1 ARG2
  841.      The function `equal' compares the structure of the two objects ARG1
  842.      and ARG2. If they are considered to be equivalent then `t' is
  843.      returned, otherwise `nil' is returned.
  844.           (equal "foo" "foo")
  845.               => t
  846.           
  847.           (equal 42 42)
  848.               => t
  849.           
  850.           (equal 42 0)
  851.               => nil
  852.           
  853.           (equal '(x . y) '(x . y))
  854.               => t
  855.  - Function: eql ARG1 ARG2
  856.      This function is a cross between `eq' and `equal': if ARG1 and
  857.      ARG2 are both numbers then the value of these numbers are compared.
  858.      Otherwise it behaves in exactly the same manner as `eq' does.
  859.           (eql 3 3)
  860.               => t
  861.           
  862.           (eql 1 2)
  863.               => nil
  864.           
  865.           (eql "foo" "foo")
  866.               => nil
  867.           
  868.           (eql 'x 'x)
  869.               => t
  870. File: jade.info,  Node: Comparison Predicates,  Next: Type Predicates,  Prev: Equality Predicates,  Up: Data Types
  871. Comparison Predicates
  872. ---------------------
  873.    These functions compare their two arguments in a scalar fashion, the
  874. arguments may be of any type but the results are only meaningful for
  875. numbers, strings (ASCII values of each byte compared until a
  876. non-matching pair is found then those two values are compared as
  877. numbers) and positions.
  878.  - Function: > ARG1 ARG2
  879.      Returns `t' when ARG1 is `greater than' ARG2.
  880.  - Function: >= ARG1 ARG2
  881.      Returns `t' when ARG1 is `greater than or equal to' ARG2.
  882.  - Function: < ARG1 ARG2
  883.      Returns `t' when ARG1 is `less than' ARG2.
  884.  - Function: <= ARG1 ARG2
  885.      Returns `t' when ARG1 is `less than or equal to' ARG2.
  886. File: jade.info,  Node: Type Predicates,  Next: Garbage Collection,  Prev: Comparison Predicates,  Up: Data Types
  887. Type Predicates
  888. ---------------
  889.    Each type has a corresponding predicate which defines the objects
  890. which are members of that type.
  891.    * `integerp'
  892.    * `numberp'
  893.    * `null'
  894.    * `consp'
  895.    * `listp'
  896.    * `vectorp'
  897.    * `subrp'
  898.    * `functionp'
  899.    * `sequencep'
  900.    * `stringp'
  901.    * `symbolp'
  902.    * `posp'
  903.    * `bufferp'
  904.    * `windowp'
  905.    * `markp'
  906.    * `processp'
  907.    * `filep'
  908.    * `keymapp'
  909.    * `eventp'
  910.    * `commandp'
  911.    The documentation for these functions is with the documentation for
  912. the relevant type.
  913. File: jade.info,  Node: Garbage Collection,  Prev: Type Predicates,  Up: Data Types
  914. Garbage Collection
  915. ------------------
  916.    In Lisp, data objects are used very freely; a side effect of this is
  917. that it is not possible to (easily) know when an object is "stale",
  918. that is, no references to it exist and it can therefore be reused.
  919.    The "garbage collector" is used to overcome this problem; whenever
  920. enough new data objects have been allocated to make it worthwhile,
  921. everything stops and the garbage collector works its way through memory
  922. deciding which objects are still in use and which are stale.  The stale
  923. objects are then recorded as being available for reuse and evaluation
  924. continues again.
  925.  - Function: garbage-collect
  926.      Runs the garbage collector, usually this function doesn't need to
  927.      be called manually.
  928.  - Variable: garbage-threshold
  929.      The number of bytes of data which must be allocated before
  930.      evaluation will pause and the garbage collector called.
  931.      Its default value is about 100K.
  932.    *Note Idle Actions::.
  933. File: jade.info,  Node: Numbers,  Next: Sequences,  Prev: Data Types,  Up: Programming Jade
  934. Numbers
  935. =======
  936.    Currently Jade is only capable of representing integers, for this it
  937. uses signed 32-bit integers: this gives a range of -2147483648 through
  938. 0 to 2147483647.
  939.    The read syntax of an integer is simply the number written in
  940. decimal, octal or hexadecimal. If the integer starts with the string
  941. `0x' it is assumed to be hexadecimal or if it starts with a zero it is
  942. treated as octal. The first character may be an optional minus or plus
  943. sign (this should come before any base-specifier). Examples of valid
  944. integer read syntaxes for the number 42 could be `42', `0x2a', `052',
  945. `+052', ...
  946.    An integer's printed representation is simply the number printed in
  947. decimal with a preceding minus sign if it is negative.
  948.  - Function: numberp OBJECT
  949.      This function returns `t' if OBJECT is a number.
  950.  - Function: integerp OBJECT
  951.      This function returns `t' when OBJECT is an integer.
  952. * Menu:
  953. * Arithmetic Functions::        Adding and substracting...
  954. * Bitwise Functions::           Using integers as bit-sequences
  955. * Numeric Predicates::          Comparing numbers
  956. * Characters::                  Integers are used to represent characters
  957. File: jade.info,  Node: Arithmetic Functions,  Next: Bitwise Functions,  Up: Numbers
  958. Arithmetic Functions
  959. ====================
  960.    There are a number of functions which perform arithmetic operations
  961. on numbers, they take a varying number of integer objects as their
  962. arguments then return a new integer object as their result.
  963.    Note that none of these functions check for overflow.
  964.  - Function: + NUMBER1 &rest NUMBERS
  965.      This functions adds its arguments then returns their sum.
  966.  - Function: - NUMBER1 &rest NUMBERS
  967.      If this function is just given one argument (NUMBER1) that number
  968.      is negated and returned. Otherwise each of NUMBERS is subtracted
  969.      from a running total starting with the value of NUMBER1.
  970.           (- 20)
  971.               => -20
  972.           
  973.           (- 20 10 5)
  974.               => 5
  975.  - Function: * NUMBER1 &rest NUMBERS
  976.      This function multiplies its arguments then returns the result.
  977.  - Function: / NUMBER1 &rest NUMBERS
  978.      This function performs division, a running-total (initialised from
  979.      NUMBER1 is successively divided by each of NUMBERS then the result
  980.      is returned.
  981.           (/ 100 2)
  982.               => 50
  983.           
  984.           (/ 200 2 5)
  985.               => 20
  986.  - Function: % DIVIDEND DIVISOR
  987.      Returns the remainder from dividing DIVIDEND by DIVISOR.
  988.           (mod 5 3)
  989.               => 2
  990.  - Function: 1+ NUMBER
  991.      This function returns the result of adding one to NUMBER.
  992.           (1+ 42)
  993.               => 43
  994.  - Function: 1- NUMBER
  995.      Returns NUMBER minus one.
  996. File: jade.info,  Node: Bitwise Functions,  Next: Numeric Predicates,  Prev: Arithmetic Functions,  Up: Numbers
  997. Bitwise Functions
  998. =================
  999.    These functions operate on the bit string which an integer is made
  1000.  - Function: lsh NUMBER COUNT
  1001.      This function bit-shifts the integer NUMBER COUNT bits to the
  1002.      left, if COUNT is negative NUMBER is shifted to the right instead.
  1003.           (lsh 1 8)
  1004.               => 256
  1005.           
  1006.           (lsh 256 -8)
  1007.               => 1
  1008.  - Function: ash NUMBER COUNT
  1009.      Similar to `lsh' except that an arithmetical shift is done, this
  1010.      means that the sign of NUMBER is always preserved.
  1011.           (ash 1 8)
  1012.               => 256
  1013.           
  1014.           (ash -1 2)
  1015.               => -4
  1016.  - Function: logand NUMBER1 &rest NUMBERS
  1017.      This function uses a bit-wise logical `and' operation to combine
  1018.      all its arguments (there must be at least one argument).
  1019.           (logand 15 8)
  1020.               => 8
  1021.           
  1022.           (logand 15 7 20)
  1023.               => 4
  1024.  - Function: logior NUMBER1 &rest NUMBERS
  1025.      Uses a bit-wise logical `inclusive-or' to combine all its
  1026.      arguments (there must always be at least one argument).
  1027.           (logior 1 2 4)
  1028.               => 7
  1029.  - Function: logxor NUMBER1 &rest NUMBERS
  1030.      Uses a bitwise logical `exclusive-or' to combine all its arguments
  1031.      (there must be at least one).
  1032.           (logxor 7 3)
  1033.               => 4
  1034.  - Function: lognot NUMBER
  1035.      This function inverts all the bits in NUMBER.
  1036.           (lognot 0)
  1037.               => -1
  1038.           
  1039.           (lognot 2)
  1040.               => -3
  1041.           
  1042.           (lognot -1)
  1043.               => 0
  1044. File: jade.info,  Node: Numeric Predicates,  Next: Characters,  Prev: Bitwise Functions,  Up: Numbers
  1045. Numeric Predicates
  1046. ==================
  1047.    For the documentation of the functions `>', `<', `>=' and `<=' see
  1048. *Note Comparison Predicates::.
  1049.  - Function: = NUMBER1 NUMBER2
  1050.      This function returns `t' if the two integers NUMBER1 and NUMBER2
  1051.      have the same value.
  1052.           (= 1 1)
  1053.               => t
  1054.           
  1055.           (= 1 0)
  1056.               => nil
  1057.  - Function: /= NUMBER1 NUMBER2
  1058.      This function will return `t' if NUMBER1 and NUMBER2 and not equal
  1059.      to each other.
  1060.           (/= 1 1)
  1061.               => nil
  1062.           
  1063.           (/= 1 0)
  1064.               => t
  1065.  - Function: zerop NUMBER
  1066.      Returns `t' if NUMBER is equal to zero.
  1067.